//
// Created by Administrator on 2025/8/15.
//

#ifndef INC_11_FREERTOS_LWIP_MQTT_MQTTCLIENT_H
#define INC_11_FREERTOS_LWIP_MQTT_MQTTCLIENT_H

#include "main.h"

// --- MQTT 配置宏 ---
#define MQTT_BROKER_HOSTNAME        "broker.emqx.io"       // 公共 MQTT Broker 的域名
#define MQTT_BROKER_PORT            (1883)                   // 标准 MQTT 端口
#define MQTT_CLIENT_ID              "STM32F407_Client_123" // 客户端ID，在 Broker 上必须唯一
#define MQTT_PUB_TOPIC              "stm32/f407/status"      // STM32 发布消息的主题
#define MQTT_SUB_TOPIC              "stm32/f407/command"     // STM32 订阅消息的主题
#define MQTT_KEEP_ALIVE_INTERVAL_S  (60)                     // KeepAlive 心跳间隔，单位：秒
#define MQTT_CMD_TIMEOUT_MS         (5000)                   // 发送 MQTT 命令的超时时间
#define MQTT_RECONNECT_DELAY_MS     (5000)                   // 断线重连的延时时间

// --- 传输层封装 ---
// Paho 库需要一个 Network 结构体来包装 socket 和底层的读写函数，以实现跨平台
typedef struct Network Network;
struct Network
{
    int my_socket;                                                      // LwIP 的 socket 句柄
    int (*mqttread) (Network*, unsigned char*, int, int);               // 读函数指针
    int (*mqttwrite) (Network*, unsigned char*, int, int);              // 写函数指针
};

void mqtt_client_task(void* argument);

#endif //INC_11_FREERTOS_LWIP_MQTT_MQTTCLIENT_H